home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / fb386 / lib / blb / filesel.blb < prev    next >
Text File  |  1995-02-15  |  21KB  |  358 lines

  1. 60000 '----------------------- ファイルセレクター(16色)  version 2.11 --------------------------------
  2. 60001 '入力 title$ ・・・ タイトル
  3. 60002 '     wild$  ・・・ 拡張子ワイルドカード(英大文字3字  例:BAS , TIF , ???(*でも可))
  4. 60003 '                  複数指定時は各拡張子をつなげる  例:BASC  ASM(3字未満はスペースをあける)
  5. 60004 '     key_in ・・・ 入力フィールド 0=なし 1=あり
  6. 60005 '     file$  ・・・ 入力フィールドに最初に表示するファイル名(key_in=1のとき)
  7. 60006 '出力 file$  ・・・ ファイル名(KEY_IN=1ならば入力フィールドで編集されたファイル名)    path$ ・・・ パス名
  8. 60007 '注意 def font"システム   12ドット" 及び dim blb_mem%(78000)を実行しておくこと
  9. 60008 '     mousepat.blbシリーズ必須
  10. 60009 '
  11. 60010 *BLB_FILESEL
  12. 60011  BLB_DX%=185:BLB_DY%=124:BLB_CS%=0:DIM BLB_ICN&(31):FILE$=KMID$(FILE$,KINSTR(FILE$,":")+1)
  13. 60012  WHILE KINSTR(FILE$,"\")>0:FILE$=KMID$(FILE$,KINSTR(FILE$,"\")+1):WEND:BLB_F$=RIGHT$(FILE$,12)
  14. 60013 '
  15. 60014 '画面描画
  16. 60015 '
  17. 60016  MOUSE 1,,,0:GET@A(BLB_DX%,BLB_DY%)-(BLB_DX%+270,BLB_DY%+233),BLB_MEM%
  18. 60017  LINE(BLB_DX%,BLB_DY%)-STEP(270,233),PSET,%8,BF,7
  19. 60018  LINE(BLB_DX%,BLB_DY%)-STEP(270,16),PSET,%8,BF,1
  20. 60019  LINE(BLB_DX%,BLB_DY%)-STEP(32+LEN(TITLE$)*6,16),PSET,%8,BF
  21. 60020  SYMBOL(BLB_DX%+24,BLB_DY%+3),TITLE$,.75!,.75!,7
  22. 60021  LINE(BLB_DX%+268,BLB_DY%)-STEP(1,232),PSET,%8,B:LINE-STEP(-268,0),PSET,%8
  23. 60022  LINE(BLB_DX%+2,BLB_DY%+2)-STEP(12,12),PSET,7,BF,%6
  24. 60023  LINE(BLB_DX%+2,BLB_DY%+2)-STEP(12,12),PSET,7
  25. 60024  LINE(BLB_DX%+2,BLB_DY%+14)-STEP(12,-12),PSET,7
  26. 60025  LINE(BLB_DX%+4,BLB_DY%+60)-STEP(86,15),PSET,%8,B
  27. 60026  LINE(BLB_DX%+4,BLB_DY%+78)-STEP(239,127),PSET,%8,B
  28. 60027  CONNECT(BLB_DX%+254,BLB_DY%+180)-STEP(1,0)-STEP(3,3)-STEP(0,1)-STEP(-7,0)-STEP(0,-1),%8,,F
  29. 60028  CONNECT(BLB_DX%+254,BLB_DY%+199)-STEP(1,0)-STEP(3,-3)-STEP(0,-1)-STEP(-7,0)-STEP(0,1),%8,,F
  30. 60029  CONNECT(BLB_DX%+167,BLB_DY%+208)-STEP(42,0)-STEP(3,3)-STEP(0,15)-STEP(-3,3)-STEP(-42,0)-STEP(-3,-3)-STEP(0,-15),%8,,F,7
  31. 60030  FOR I%=0 TO 1:CONNECT(BLB_DX%+168+I%*52,BLB_DY%+210)-STEP(40,0)-STEP(2,2)-STEP(0,13)-STEP(-2,2)-STEP(-40,0)-STEP(-2,-2)-STEP(0,-13),%8,,F,7
  32. 60031   SYMBOL STEP(10,1),KMID$("選択取消",I%*2+1,2),.75!,.75!,%8,,,,1
  33. 60032   LINE(BLB_DX%+262,BLB_DY%+174+I%*16)-STEP(-15,15),PSET,%8,B
  34. 60033   CONNECT STEP(3,-2)-STEP(10,0)-STEP(0,-10)-STEP(1,-1)-STEP(0,13)-STEP(-13,0),%8,,F,%8:NEXT
  35. 60034  CONNECT(BLB_DX%+185,BLB_DY%+60)-STEP(56,0)-STEP(2,2)-STEP(0,11)-STEP(-2,2)-STEP(-56,0)-STEP(-2,-2)-STEP(0,-11),%8,,F,7:SYMBOL STEP(10,0),"DIR移動",.75!,.75!,%8
  36. 60035  LINE(BLB_DX%+246,BLB_DY%+59)-STEP(17,17),PSET,%8,B
  37. 60036  A$="0006000f801fc03fe076606600000000e08b108a108ae08b008a0072"
  38. 60037  FOR I%=0 TO 13:BLB_ICN&(I%)=VAL("&h"+MID$(A$,I%*4+1,4)):NEXT
  39. 60038  PUT@(BLB_DX%+249,BLB_DY%+61)-(BLB_DX%+249+31,BLB_DY%+61+13),BLB_ICN&,,%8
  40. 60039  LINE(BLB_DX%+247,BLB_DY%+78)-STEP(15,96),PSET,%8,BF,1
  41. 60040  FOR I%=0 TO 1:LINE(BLB_DX%+4+I%*71,BLB_DY%+21)-STEP(15,36),PSET,%8,B:NEXT
  42. 60041  CONNECT(BLB_DX%+8,BLB_DY%+39)-STEP(6,-6)-STEP(0,12),%8,PSET,F,%8
  43. 60042  CONNECT(BLB_DX%+86,BLB_DY%+39)-STEP(-6,-6)-STEP(0,12),%8,PSET,F,%8
  44. 60043  LINE (BLB_DX%+22,BLB_DY%+21)-STEP(50,36),PSET,%8,B
  45. 60044  IF KEY_IN=1 THEN LINE(BLB_DX%+4,BLB_DY%+208)-STEP(90,15),PSET,%8,B:GOSUB *BLB_FS_PUT_FILENAME
  46. 60045  FOR I%=0 TO 15:LINE(BLB_DX%+95+(I% MOD 8)*21,BLB_DY%+21+(I%\8)*18)-STEP(21,18),PSET,%8,B
  47. 60046   SYMBOL(BLB_DX%+100+(I% MOD 8)*21,BLB_DY%+25+(I%\8)*18),AKCNV$(CHR$(I%+65-(I%>1))),.75!,.75!,%(8+(INP(&H31DC+(I%-(I%>1))*4)\255)*2*(I%<>15)),,,1
  48. 60047  NEXT:BLB_DRV%=-1:GOSUB *BLB_FS_GETFILE:GOSUB *BLB_FS_DIRPRINT:MOUSEPAT=0:GOSUB *BLB_MOUSEPAT
  49. 60048  GOSUB *BLB_FS_DRVXOR:WHILE INKEY$<>"":WEND
  50. 60049 '
  51. 60050 'メインルーチン
  52. 60051 '
  53. 60052 *BLB_FS_MAIN
  54. 60053  I%=ASC(INKEY$+CHR$(0)):IF I%=13 THEN I%=0:GOTO *BLB_FS_SEL2 ELSE IF I%=27 OR I%=24 THEN I%=-1:GOTO *BLB_FS_SEL2 ELSE IF I%>0 THEN GOSUB *BLB_FS_KEYINPUT
  55. 60054  IF MOUSE(2,0)=0 THEN *BLB_FS_MAIN
  56. 60055  BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  57. 60056 *BLB_FS_MAIN2
  58. 60057  IF BLB_MX%<0 OR BLB_MX%>270 OR BLB_MY%<0 OR BLB_MY%>233 THEN WHILE MOUSE(2,0):WEND:GOTO *BLB_FS_MAIN
  59. 60058  IF BLB_MX%>1 AND BLB_MX%<15 AND BLB_MY%>1 AND BLB_MY%<15 THEN *BLB_FS_EXITボタン
  60. 60059  IF BLB_MX%>94 AND BLB_MX%<263 AND BLB_MY%>20 AND BLB_MY%<58 THEN *BLB_FS_DRIVE1
  61. 60060  IF BLB_MX%>246 AND BLB_MX%<263 AND BLB_MY%>173 AND BLB_MY%<206 THEN *BLB_FS_UPDOWN
  62. 60061  IF BLB_MX%>247 AND BLB_MX%<262 AND BLB_MY%>78 AND BLB_MY%<174 THEN *BLB_FS_BAR
  63. 60062  IF BLB_MX%>4 AND BLB_MX%<244 AND BLB_MY%>78 AND BLB_MY%<203 THEN *BLB_FS_MARK
  64. 60063  IF BLB_MX%>246 AND BLB_MX%<263 AND BLB_MY%>59 AND BLB_MY%<76 THEN *BLB_FS_UPDIR
  65. 60064  IF BLB_MX%>182 AND BLB_MX%<244 AND BLB_MY%>59 AND BLB_MY%<76 THEN *BLB_FS_CHANGEDIR
  66. 60065  IF BLB_MX%>4 AND BLB_MX%<94 AND BLB_MY%>208 AND BLB_MY%<223 AND KEY_IN=1 THEN *BLB_FS_FNAME_CLICKED
  67. 60066  IF BLB_MX%>22 AND BLB_MX%<72 AND BLB_MY%>21 AND BLB_MY%<57 THEN *BLB_FS_DRIVE2
  68. 60067  IF BLB_MX%> 5 AND BLB_MX%<19 AND BLB_MY%>21 AND BLB_MY%<57 THEN *BLB_FS_DRIVE3
  69. 60068  IF BLB_MX%>76 AND BLB_MX%<90 AND BLB_MY%>21 AND BLB_MY%<57 THEN *BLB_FS_DRIVE3
  70. 60069  IF BLB_MX%>166 AND BLB_MX%<210 AND BLB_MY%>210 AND BLB_MY%<227 THEN *BLB_FS_SEL
  71. 60070  IF BLB_MX%>218 AND BLB_MX%<262 AND BLB_MY%>210 AND BLB_MY%<227 THEN *BLB_FS_SEL
  72. 60071 '
  73. 60072 'ダイアログ移動
  74. 60073 '
  75. 60074 *BLB_FS_MOVE
  76. 60075  A%=BLB_DX%:B%=BLB_DY%:BLB_ICN&(0)=BLB_MX%:BLB_ICN&(1)=BLB_MY%
  77. 60076  LINE(A%,B%)-STEP(270,233),XOR,%7,B:MOUSEPAT=3:GOSUB *BLB_MOUSEPAT
  78. 60077  MOUSE 4,BLB_MX%,BLB_MY%,BLB_RESO_X-271+BLB_MX%,BLB_RESO_Y-234+BLB_MY%
  79. 60078  WHILE MOUSE(2,0):C%=MOUSE(0)-BLB_ICN&(0):I%=MOUSE(1)-BLB_ICN&(1)
  80. 60079   IF A%<>C% OR B%<>I% THEN LINE(A%,B%)-STEP(270,233),XOR,%7,B:LINE(C%,I%)-STEP(270,233),XOR,%7,B:A%=C%:B%=I%
  81. 60080  WEND:LINE(A%,B%)-STEP(270,233),XOR,%7,B
  82. 60081  MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:MOUSE 4,0,0,BLB_RESO_X-1,BLB_RESO_Y-1
  83. 60082  IF A%=BLB_DX% AND B%=BLB_DY% THEN *BLB_FS_MAIN
  84. 60083  GET@A(BLB_DX%,BLB_DY%)-(BLB_DX%+270,BLB_DY%+233),BLB_MEM%,40000
  85. 60084  PUT@A(BLB_DX%,BLB_DY%)-(BLB_DX%+270,BLB_DY%+233),BLB_MEM%
  86. 60085  BLB_DX%=A%:BLB_DY%=B%:GET@A(BLB_DX%,BLB_DY%)-(BLB_DX%+270,BLB_DY%+233),BLB_MEM%
  87. 60086  PUT@A(BLB_DX%,BLB_DY%)-(BLB_DX%+270,BLB_DY%+233),BLB_MEM%,,,,,40000:GOTO *BLB_FS_MAIN
  88. 60087 '
  89. 60088 'ドライブ名選択
  90. 60089 '
  91. 60090 *BLB_FS_DRIVE1
  92. 60091  I%=(BLB_MX%-95)\21+((BLB_MY%-21)\18)*8:I%=I%-(I%>1):IF INP(&H31DC+I%*4)=255 THEN *BLB_FS_MOVE
  93. 60092  GOSUB *BLB_FS_DRVXOR:GOSUB *BLB_FS_ERASE:BLB_DRV%=I%:GOSUB *BLB_FS_DRVXOR
  94. 60093  SHELL CHR$(I%+65)+":":GOSUB *BLB_FS_GETFILE:GOSUB *BLB_FS_DIRPRINT
  95. 60094  WHILE MOUSE(2,0):WEND:GOTO *BLB_FS_MAIN
  96. 60095 'ドライブアイコン選択
  97. 60096 *BLB_FS_DRIVE2
  98. 60097  B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  99. 60098   A%=(BLB_MX%>22)*(BLB_MX%<72)*(BLB_MY%>21)*(BLB_MY%<57)
  100. 60099   IF A%<>B% THEN LINE(BLB_DX%+23,BLB_DY%+22)-STEP(48,34),XOR,%7,BF:B%=A%
  101. 60100  WEND:IF B%=0 THEN *BLB_FS_MAIN ELSE LINE(BLB_DX%+23,BLB_DY%+22)-STEP(48,34),XOR,%7,BF
  102. 60101  GOSUB *BLB_FS_ERASE:GOSUB *BLB_FS_GETFILE:GOSUB *BLB_FS_DIRPRINT:GOTO *BLB_FS_MAIN
  103. 60102 '←→押下
  104. 60103 *BLB_FS_DRIVE3
  105. 60104  I%=BLB_MX%<50:B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  106. 60105   A%=(BLB_MX%>76+I%*71)*(BLB_MX%<90+I%*71)*(BLB_MY%>21)*(BLB_MY%<57)
  107. 60106   IF A%<>B% THEN LINE(BLB_DX%+76+I%*71,BLB_DY%+22)-STEP(13,34),XOR,%7,BF:B%=A%
  108. 60107  WEND:IF B%=0 THEN *BLB_FS_MAIN ELSE LINE(BLB_DX%+76+I%*71,BLB_DY%+22)-STEP(13,34),XOR,%7,BF
  109. 60108  A%=I%*2+1:I%=(BLB_DRV%+A%+17)MOD 17:WHILE INP(&H31DC+I%*4)=255 AND I%<16 OR I%=2
  110. 60109   I%=(I%+A%+17)MOD 17:WEND
  111. 60110  GOSUB *BLB_FS_DRVXOR:GOSUB *BLB_FS_ERASE:BLB_DRV%=I%:BLB_FILE&(1)=-1:BLB_FILE$(0)=CHR$(I%+65)+": ":SHELL BLB_FILE$(0):GOSUB *BLB_FS_DRVXOR:GOSUB *BLB_FS_DIRPRINT:GOTO *BLB_FS_MAIN
  112. 60111 '
  113. 60112 'ファイル名クリック処理
  114. 60113 '
  115. 60114 *BLB_FS_MARK
  116. 60115  WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  117. 60116   B%=BLB_FSEL%-BLB_FILE&(0):A%=(BLB_MY%-79)\14+BLB_FILE&(0)
  118. 60117   IF BLB_MX%>4 AND BLB_MX%<244 AND BLB_MY%>78 AND BLB_MY%<203 THEN
  119. 60118    IF A%<>BLB_FSEL% THEN
  120. 60119     IF B%>=0 AND B%<9 THEN LINE(BLB_DX%+5,BLB_DY%+79+B%*14)-STEP(237,13),XOR,%7,BF
  121. 60120     IF A%=<BLB_FILE&(1) THEN LINE(BLB_DX%+5,BLB_DY%+79+(A%-BLB_FILE&(0))*14)-STEP(237,13),XOR,%7,BF:BLB_FSEL%=A% ELSE BLB_FSEL%=0
  122. 60121    ENDIF
  123. 60122   ELSE
  124. 60123    I%=(BLB_MY%<79)-(BLB_MY%>202)
  125. 60124    IF BLB_FSEL%>0 THEN LINE(BLB_DX%+5,BLB_DY%+79+B%*14)-STEP(237,13),XOR,%7,BF:BLB_FSEL%=0
  126. 60125    IF I%+BLB_FILE&(0)>0 AND I%+BLB_FILE&(0)+7<BLB_FILE&(1) AND I%<>0 THEN GOSUB *BLB_FS_SCROLL
  127. 60126   ENDIF
  128. 60127  WEND:IF ASC(BLB_FILE$(BLB_FSEL%))=32 THEN GOSUB *BLB_FS_選択:GOSUB *BLB_FS_PUT_FILENAME
  129. 60128  A%=INP(&H3B04)*100/128:I%=0:WHILE MOUSE(2,0)=0 AND I%<A%:WAIT 1:I%=I%+1:WEND
  130. 60129  IF I%=A% THEN *BLB_FS_MAIN
  131. 60130  BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  132. 60131  IF BLB_MX%<5 OR BLB_MX%>243 OR BLB_MY%<79 OR BLB_MY%>202 THEN *BLB_FS_MAIN2
  133. 60132  IF BLB_FSEL%<>(BLB_MY%-79)\14+BLB_FILE&(0) THEN *BLB_FS_MARK
  134. 60133 'ダブルクリック成立
  135. 60134  GOSUB *BLB_FS_選択:IF ASC(BLB_FILE$(BLB_FSEL%))=32 THEN *BLB_FS_終了 ELSE *BLB_FS_CHANGEDIR2
  136. 60135 '
  137. 60136 '↑UPボタン処理
  138. 60137 '
  139. 60138 *BLB_FS_UPDIR
  140. 60139  B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  141. 60140   A%=(BLB_MX%>246)*(BLB_MX%<263)*(BLB_MY%>59)*(BLB_MY%<76)
  142. 60141   IF A%<>B% THEN LINE(BLB_DX%+247,BLB_DY%+60)-STEP(15,15),XOR,%7,BF:B%=A%
  143. 60142  WEND:IF B%=0 THEN *BLB_FS_MAIN
  144. 60143  LINE(BLB_DX%+247,BLB_DY%+60)-STEP(15,15),XOR,%7,BF:IF LEN(BLB_FILE$(0))=3 THEN *BLB_FS_MAIN
  145. 60144  A$="..":GOSUB *BLB_FS_SECURITY:GOTO *BLB_FS_MAIN
  146. 60145 '
  147. 60146 'ディレクトリ移動
  148. 60147 '
  149. 60148 *BLB_FS_CHANGEDIR
  150. 60149  B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  151. 60150  A%=(BLB_MX%>182)*(BLB_MX%<244)*(BLB_MY%>59)*(BLB_MY%<76)
  152. 60151  IF A%<>B% THEN CONNECT(BLB_DX%+185,BLB_DY%+61)-STEP(56,0)-STEP(1,1)-STEP(0,11)-STEP(-1,1)-STEP(-56,0)-STEP(-1,-1)-STEP(0,-11),%7,XOR,F,%7:B%=A%
  153. 60152  WEND:IF B%=0 THEN *BLB_FS_MAIN
  154. 60153  CONNECT(BLB_DX%+185,BLB_DY%+61)-STEP(56,0)-STEP(1,1)-STEP(0,11)-STEP(-1,1)-STEP(-56,0)-STEP(-1,-1)-STEP(0,-11),%7,XOR,F,%7
  155. 60154  IF BLB_FSEL%=0 THEN *BLB_FS_MAIN
  156. 60155  GOSUB *BLB_FS_選択:BLB_CS%=0:GOSUB *BLB_FS_PUT_FILENAME:IF ASC(BLB_FILE$(BLB_FSEL%))=32 THEN *BLB_FS_MAIN
  157. 60156 *BLB_FS_CHANGEDIR2
  158. 60157  IF LEFT$(FILE$,2)="<ル" THEN FILE$="\" ELSE IF KLEFT$(FILE$,2)="<親" THEN FILE$=".."
  159. 60158  A$=FILE$:GOSUB *BLB_FS_SECURITY:GOTO *BLB_FS_MAIN
  160. 60159 '
  161. 60160 '▲▼ボタン処理
  162. 60161 '
  163. 60162 *BLB_FS_UPDOWN
  164. 60163  A%=0:C%=(BLB_MY%-174)\16
  165. 60164  WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  166. 60165   B%=A%:A%=(BLB_MX%>246)*(BLB_MX%<263)*(BLB_MY%>173+C%*16)*(BLB_MY%<189+C%*16)
  167. 60166   IF B%<>A% THEN CONNECT(BLB_DX%+250,BLB_DY%+187+16*C%)-STEP(10,0)-STEP(0,-10)-STEP(1,-1)-STEP(0,12)-STEP(-12,0),%(8+7*A%):B%=A%
  168. 60167   IF A%=1 AND (C%=0 AND BLB_FILE&(0)>1 OR C%=1 AND BLB_FILE&(0)+9=<BLB_FILE&(1)) THEN
  169. 60168    BLB_MX%=B%:I%=C%*2-1:GOSUB *BLB_FS_SCROLL:B%=BLB_MX%
  170. 60169   ENDIF
  171. 60170  WEND:CONNECT(BLB_DX%+250,BLB_DY%+187+16*C%)-STEP(10,0)-STEP(0,-10)-STEP(1,-1)-STEP(0,12)-STEP(-12,0),%8:GOTO *BLB_FS_MAIN
  172. 60171 '
  173. 60172 'バー押下処理
  174. 60173 '
  175. 60174 *BLB_FS_BAR:MOUSEPAT=3:GOSUB *BLB_MOUSEPAT
  176. 60175  WHILE MOUSE(2,0):IF ABS(MOUSE(0)-BLB_DX%-255)<25 AND BLB_FILE&(1)>9 THEN
  177. 60176    A%=(MOUSE(1)-BLB_DY%-79-BLB_BARL%\2)*BLB_FILE&(1)/94
  178. 60177    IF A%<1 THEN A%=1 ELSE IF A%+9>BLB_FILE&(1) THEN A%=BLB_FILE&(1)-8
  179. 60178    I%=A%-BLB_FILE&(0):IF I%<>0 THEN IF ABS(I%)<8 THEN GOSUB *BLB_FS_SCROLL ELSE BLB_FILE&(0)=A%:B%=A%+8:GOSUB *BLB_FS_PRINT
  180. 60179   ENDIF
  181. 60180  WEND:MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:GOTO *BLB_FS_MAIN
  182. 60181 '
  183. 60182 'EXITボタン
  184. 60183 '
  185. 60184 *BLB_FS_EXITボタン
  186. 60185  B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  187. 60186   A%=(BLB_MX%>1)*(BLB_MX%<15)*(BLB_MY%>1)*(BLB_MY%<15)
  188. 60187   IF A%<>B% THEN LINE(BLB_DX%+2,BLB_DY%+2)-STEP(12,12),XOR,%7,BF:B%=A%
  189. 60188  WEND:IF B%=1 THEN FILE$="":PATH$="":GOTO *BLB_FS_終了 ELSE *BLB_FS_MAIN
  190. 60189 *BLB_FS_選択
  191. 60190  PATH$=BLB_FILE$(0):A$=MID$(BLB_FILE$(BLB_FSEL%),2,12):MID$(A$,9)="."
  192. 60191  FILE$="":FOR I%=1 TO KLEN(A$):IF KMID$(A$,I%,1)<>" " THEN FILE$=FILE$+KMID$(A$,I%,1)
  193. 60192  NEXT:IF ASC(BLB_FILE$(BLB_FSEL%))=32 THEN BLB_F$=FILE$:BLB_CS%=0:RETURN ELSE RETURN
  194. 60193 *BLB_FS_終了
  195. 60194  ERASE BLB_ICN&,BLB_FILE$:PUT@A(BLB_DX%,BLB_DY%)-(BLB_DX%+270,BLB_DY%+233),BLB_MEM%:RETURN
  196. 60195 '
  197. 60196 '選択/取消ボタン
  198. 60197 '
  199. 60198 *BLB_FS_SEL
  200. 60199  I%=BLB_MX%>210:B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%+I%*52:BLB_MY%=MOUSE(1)-BLB_DY%
  201. 60200   A%=(BLB_MX%>166)*(BLB_MX%<210)*(BLB_MY%>210)*(BLB_MY%<227)
  202. 60201   IF A%<>B% THEN CONNECT(BLB_DX%+168-I%*52,BLB_DY%+211)-STEP(40,0)-STEP(1,1)-STEP(0,13)-STEP(-1,1)-STEP(-40,0)-STEP(-1,-1)-STEP(0,-13),%7,XOR,F,%7:B%=A%
  203. 60202  WEND:IF B%=0 THEN *BLB_FS_MAIN
  204. 60203  CONNECT(BLB_DX%+168-I%*52,BLB_DY%+211)-STEP(40,0)-STEP(1,1)-STEP(0,13)-STEP(-1,1)-STEP(-40,0)-STEP(-1,-1)-STEP(0,-13),%7,XOR,F,%7
  205. 60204 *BLB_FS_SEL2
  206. 60205  IF I%<0 THEN FILE$="":PATH$="":GOTO *BLB_FS_終了 ELSE IF (BLB_FSEL%=0 AND KEY_IN=0) OR (KEY_IN=1 AND BLB_F$="") THEN *BLB_FS_MAIN
  207. 60206  IF KEY_IN=0 THEN GOSUB *BLB_FS_選択:IF ASC(BLB_FILE$(BLB_FSEL%))=60 THEN *BLB_FS_MAIN
  208. 60207  IF KEY_IN=1 THEN PATH$=BLB_FILE$(0):FILE$=BLB_F$
  209. 60208  GOTO *BLB_FS_終了
  210. 60209 '
  211. 60210 'ファイル名取得  (BLB_FILE&(0)=表示開始FILE No.  BLB_FILE&(1)=ファイル数+1)
  212. 60211 '
  213. 60212 *BLB_FS_GETFILE:MOUSEPAT=1:GOSUB *BLB_MOUSEPAT
  214. 60213  ON ERROR GOTO *BLB_FS_GF_ERROR:BLB_FILE&(0)=1:BLB_FILE&(2)=0:BLB_FSEL%=0:FILES ,C,BLB_FILE&:FILES ,C,BLB_FILE&:BLB_FILE&(2)=BLB_FILE&(1)
  215. 60214  DIM BLB_F$(BLB_FILE&(1)),BLB_FILE$(BLB_FILE&(1))
  216. 60215  FILES ,N,BLB_F$:GOSUB *BLB_FS_SORT:A%=1:BLB_FILE$(0)=BLB_F$(0)
  217. 60216  I%=1:WHILE I%=<BLB_FILE&(1):A%=A%-(MID$(BLB_F$(I%),17,1)="-"):I%=I%+1:WEND
  218. 60217  B%=1:I%=1:WHILE I%=<BLB_FILE&(1)
  219. 60218   IF MID$(BLB_F$(I%),17,1)="-" THEN
  220. 60219    BLB_FILE$(B%)=BLB_F$(I%):B%=B%+1
  221. 60220   ELSE
  222. 60221    IF INSTR(WILD$,"???")+INSTR(WILD$,"*")-(INSTR(WILD$,MID$(BLB_F$(I%),10,3))MOD 3=1) THEN BLB_FILE$(A%)=BLB_F$(I%):A%=A%+1
  223. 60222   ENDIF
  224. 60223  I%=I%+1:WEND:BLB_FILE&(1)=A%-1:ERASE BLB_F$:GOSUB *BLB_FS_PROCESSING
  225. 60224 *BLB_FS_GFRET:ON ERROR GOTO 0:A%=1:B%=9:GOSUB *BLB_FS_PRINT:MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:RETURN
  226. 60225 *BLB_FS_GF_ERROR:IF ERR=63 THEN RESUME NEXT
  227. 60226  IF BLB_DRV%<0 THEN BLB_DRV%=16:SHELL"Q:":RESUME
  228. 60227  BLB_FILE&(1)=-1:BLB_FILE$(0)=CHR$(BLB_DRV%+65)+":<Not Ready>":RESUME *BLB_FS_GFRET
  229. 60228 '
  230. 60229 'ファイル名加工
  231. 60230 '
  232. 60231 *BLB_FS_PROCESSING
  233. 60232  I%=1:WHILE I%=<BLB_FILE&(1):A$=BLB_FILE$(I%):MID$(A$,33)="-":MID$(A$,36)="-"
  234. 60233   IF MID$(A$,17,1)="-" THEN
  235. 60234    A$="<"+LEFT$(A$,12)+">           "+MID$(A$,31,14)
  236. 60235    IF MID$(A$,2,2)=". " THEN A$="<<ルートディレクトリ>>"
  237. 60236    IF MID$(A$,2,2)=".." THEN A$="<<親ディレクトリ >>"
  238. 60237   ELSE
  239. 60238    A$=" "+LEFT$(A$,12)+" "+MID$(A$,17,10)+" "+MID$(A$,31,14)
  240. 60239   ENDIF
  241. 60240   BLB_FILE$(I%)=A$:I%=I%+1:WEND:RETURN
  242. 60241 '
  243. 60242 'カレントドライブ&ディレクトリ名表示
  244. 60243 '
  245. 60244 *BLB_FS_DIRPRINT
  246. 60245  A%=ASC(BLB_FILE$(0))-65:B%=INP(&H31DC+A%*4):BLB_DRV%=A%
  247. 60246  IF A%=16 THEN C%=68 ELSE IF B%=0 THEN C%=65+INP(&H31DC+A%*4+2)\2 ELSE IF B%=2 THEN C%=72
  248. 60247  IF B%=3 THEN
  249. 60248   FOR I%=0 TO 31:BLB_ICN&(I%)=0:NEXT
  250. 60249   A$="30180C06482412094824120948241209FEFFFF7F03000040030000402384C1436386214263462242A3452242A345C2432324444223E4274223242442232424420300004003000040FFFFFF7FFFFFFF3F48241209482412094824120930180C06"
  251. 60250   FOR I%=0 TO 95:POKE VARPTR(BLB_ICN&(5))+(I%\4)*4+(3-I% MOD 4),VAL("&h"+MID$(A$,I%*2+1,2)):NEXT
  252. 60251  ELSE
  253. 60252   FOR I%=0 TO 31:BLB_ICN&(I%)=PEEK([&H108]&H27F00+C%*256+I%*4,4):NEXT
  254. 60253  ENDIF
  255. 60254  PUT@(BLB_DX%+32,BLB_DY%+24)-(BLB_DX%+63,BLB_DY%+55),BLB_ICN&,,%8
  256. 60255  IF BLB_FILE&(1)>=0 THEN
  257. 60256   A$=STR$(DSKF(A%)):A%=LEN(A$)-2:I%=0
  258. 60257   WHILE I%<A%\3:A$=LEFT$(A$,LEN(A$)-3-I%*4)+","+MID$(A$,LEN(A$)-2-I%*4):I%=I%+1:WEND
  259. 60258   SYMBOL(BLB_DX%+100,BLB_DY%+62),RIGHT$("      "+A$,9)+" KB",.75!,.75!,%8
  260. 60259  ENDIF
  261. 60260 *BLB_FS_DIRPRINT2
  262. 60261  A$=MID$(BLB_FILE$(0),3)
  263. 60262  WHILE KINSTR(A$,"\")>0:A$=KMID$(A$,KINSTR(A$,"\")+1):WEND:IF A$="" THEN A$="\"
  264. 60263  LINE(BLB_DX%+5,BLB_DY%+61)-STEP(84,13),PSET,7,BF
  265. 60264  SYMBOL(BLB_DX%+12,BLB_DY%+62),A$,.75!,.75!,%8
  266. 60265 RETURN
  267. 60266 '
  268. 60267 'カレントドライブ&ディレクトリ名消去
  269. 60268 '
  270. 60269 *BLB_FS_ERASE
  271. 60270  LINE(BLB_DX%+32,BLB_DY%+23)-STEP(31,31),PSET,7,BF
  272. 60271  LINE(BLB_DX%+100,BLB_DY%+62)-STEP(71,11),PSET,7,BF
  273. 60272 *BLB_FS_ERASE2
  274. 60273  LINE(BLB_DX%+5,BLB_DY%+79)-STEP(237,125),PSET,7,BF:BLB_FILE&(0)=0:BLB_FILE&(2)=0:ERASE BLB_FILE$:RETURN
  275. 60274 *BLB_FS_DRVXOR
  276. 60275  A%=BLB_DRV%+(BLB_DRV%>1)
  277. 60276  LINE(BLB_DX%+96+(A% MOD 8)*21,BLB_DY%+22+(A%\8)*18)-STEP(19,16),XOR,%7,BF:RETURN
  278. 60277 '
  279. 60278 'ファイル名&バー表示(1=<A%~B%(絶対位置)) 使用変数 I%
  280. 60279 '
  281. 60280 *BLB_FS_PRINT
  282. 60281  MOUSE 1,,,0:FOR I%=A% TO B%
  283. 60282   LINE(BLB_DX%+5,BLB_DY%+79+(I%-BLB_FILE&(0))*14)-STEP(237,13),PSET,%15+(I%=BLB_FSEL%)*7,BF
  284. 60283   IF I%=<BLB_FILE&(1) THEN
  285. 60284    SYMBOL(BLB_DX%+7,BLB_DY%+80+(I%-BLB_FILE&(0))*14),BLB_FILE$(I%),.75!,.75!,%8-(I%=BLB_FSEL%)*7
  286. 60285   ENDIF
  287. 60286  NEXT:IF BLB_FILE&(1)<10 THEN
  288. 60287   BLB_BARL%=88:BLB_BARY%=0
  289. 60288  ELSE
  290. 60289   BLB_BARL%=792/BLB_FILE&(1):BLB_BARY%=(88-BLB_BARL%)*(BLB_FILE&(0)-1)/(BLB_FILE&(1)-9)
  291. 60290   LINE(BLB_DX%+248,BLB_DY%+79)-STEP(13,94),PSET,1,BF
  292. 60291  ENDIF
  293. 60292  LINE(BLB_DX%+248,BLB_DY%+79+BLB_BARY%)-STEP(13,BLB_BARL%+6),PSET,%8,BF,7
  294. 60293  CONNECT STEP(-1,-1)-STEP(0,-3-BLB_BARL%)-STEP(-1,1)-STEP(0,BLB_BARL%+1)-STEP(-8,0)-STEP(-1,1)-STEP(9,0),%8:MOUSE 1,,,1:RETURN
  295. 60294 '
  296. 60295 '部分スクロール処理  入力 I%{上-7≦I%≦7下 I≠0}  使用変数 A% B% I%
  297. 60296 '
  298. 60297 *BLB_FS_SCROLL
  299. 60298 IF I%<0 THEN
  300. 60299  GET@A(BLB_DX%+5,BLB_DY%+79)-(BLB_DX%+242,BLB_DY%+204+I%*14),BLB_MEM%,40000
  301. 60300  PUT@A(BLB_DX%+5,BLB_DY%+79-I%*14)-(BLB_DX%+242,BLB_DY%+204),BLB_MEM%,,,,,40000:A%=0:B%=-I%-1
  302. 60301 ELSE
  303. 60302  GET@A(BLB_DX%+5,BLB_DY%+79+I%*14)-(BLB_DX%+242,BLB_DY%+204),BLB_MEM%,40000
  304. 60303  PUT@A(BLB_DX%+5,BLB_DY%+79)-(BLB_DX%+242,BLB_DY%+204-I%*14),BLB_MEM%,,,,,40000:A%=9-I%:B%=8
  305. 60304 ENDIF
  306. 60305 BLB_FILE&(0)=BLB_FILE&(0)+I%:A%=A%+BLB_FILE&(0):B%=B%+BLB_FILE&(0):GOSUB *BLB_FS_PRINT:RETURN
  307. 60306 '
  308. 60307 'ファイル名 ソート(シェルソート) ただしCD-ROMはソートを行わない
  309. 60308 '
  310. 60309 *BLB_FS_SORT
  311. 60310  IF ASC(BLB_F$(0))=81 OR INP(&H31DC+BLB_DRV%*4)=208 THEN RETURN
  312. 60311  A%=(BLB_FILE&(1)-1)\2:WHILE A%>0:B%=BLB_FILE&(1)-1-A%
  313. 60312  *BLB_FS_SORTLOOP:C%=0:FOR I%=0 TO B%
  314. 60313   IF BLB_F$(I%+1)>BLB_F$(I%+A%+1) THEN SWAP BLB_F$(I%+1),BLB_F$(I%+A%+1):C%=I%
  315. 60314   NEXT:B%=C%-A%:IF C% THEN *BLB_FS_SORTLOOP ELSE A%=(A%+1)\3:WEND:RETURN
  316. 60315 '
  317. 60316 'ディレクトリ移動実行 (入力:A$・・・ディレクトリ名)
  318. 60317 '
  319. 60318 *BLB_FS_SECURITY:MOUSEPAT=1:GOSUB *BLB_MOUSEPAT
  320. 60319  B%=BLB_FILE&(2):GOSUB *BLB_FS_ERASE2:ON ERROR GOTO *BLB_FS_SECURITY_ERROR
  321. 60320  FILES,C,BLB_ICN&:FILES,C,BLB_ICN&:IF BLB_ICN&(1)<>B% AND B%<>0 THEN BLB_FILE&(1)=BLB_ICN&(1):ERROR 63
  322. 60321  SHELL"CD "+A$:GOSUB *BLB_FS_GETFILE:GOSUB *BLB_FS_DIRPRINT2
  323. 60322  WHILE MOUSE(2,0):WEND:ON ERROR GOTO 0:RETURN
  324. 60323 *BLB_FS_SECURITY_ERROR
  325. 60324  IF ERR=63 THEN SHELL"CD \":A$="\":BLB_FILE$(0)="":RESUME *BLB_FS_SECURITY
  326. 60325  BLB_FILE&(1)=-1:BLB_FILE$(0)=CHR$(BLB_DRV%+65)+":<Not Ready>":BLB_FILE&(0)=1:BLB_FSEL%=0:GOSUB *BLB_FS_DIRPRINT:RESUME *BLB_FS_GFRET
  327. 60326 '
  328. 60327 'キー入力(KEY_IN=1のときのみ)
  329. 60328 '
  330. 60329 *BLB_FS_KEYINPUT
  331. 60330  IF I%>128 AND I%<160 OR I%>223 THEN A$=CHR$(I%)+INKEY$ ELSE A$=CHR$(I%)
  332. 60331  IF I%=8 AND BLB_CS%>0 THEN BLB_CS%=LEN(KLEFT$(BLB_F$,KLEN(LEFT$(BLB_F$,BLB_CS%))-1))
  333. 60332  IF (I%=127 OR I%=8)AND LEN(BLB_F$)>BLB_CS% THEN
  334. 60333   BLB_F$=LEFT$(BLB_F$,BLB_CS%)+MID$(BLB_F$,BLB_CS%+2+KTYPE(MID$(BLB_F$,BLB_CS%+1,2),1))
  335. 60334   GOSUB *BLB_FS_PUT_FILENAME
  336. 60335  ELSE IF I%=29 AND BLB_CS%>0 THEN
  337. 60336   GOSUB *BLB_FS_CUR_ERASE:BLB_CS%=LEN(KLEFT$(BLB_F$,KLEN(LEFT$(BLB_F$,BLB_CS%))-1)):GOSUB *BLB_FS_CUR_PUT
  338. 60337  ELSE IF I%=28 AND BLB_CS%<LEN(BLB_F$) AND BLB_CS%<12-LEN(KRIGHT$(BLB_F$,1)) THEN
  339. 60338   GOSUB *BLB_FS_CUR_ERASE:BLB_CS%=BLB_CS%+1+KTYPE(MID$(BLB_F$,BLB_CS%+1,2),1):GOSUB *BLB_FS_CUR_PUT
  340. 60339  ENDIF
  341. 60340  IF I%<32 OR I%=127 THEN RETURN
  342. 60341  A$=LEFT$(BLB_F$,BLB_CS%)+A$+MID$(BLB_F$,BLB_CS%+1):IF LEN(A$)>12 THEN RETURN
  343. 60342  BLB_F$=A$:I%=BLB_CS%+1-(I%>128 AND I%<160 OR I%>223):IF I%<12 THEN BLB_CS%=I%
  344. 60343  GOSUB *BLB_FS_PUT_FILENAME:RETURN
  345. 60344 *BLB_FS_PUT_FILENAME :IF KEY_IN=0 THEN RETURN
  346. 60345  LINE(BLB_DX%+13,BLB_DY%+210)-STEP(71,11),PSET,7,BF
  347. 60346  SYMBOL(BLB_DX%+13,BLB_DY%+210),RIGHT$(BLB_F$,12),.75!,.75!,%8
  348. 60347 *BLB_FS_CUR_PUT
  349. 60348  GET@A(BLB_DX%+13+BLB_CS%*6,BLB_DY%+210)-(BLB_DX%+14+BLB_CS%*6,BLB_DY%+221),BLB_MEM%,77789
  350. 60349  LINE(BLB_DX%+13+BLB_CS%*6,BLB_DY%+210)-STEP(1,11),PSET,2,B:RETURN
  351. 60350 *BLB_FS_CUR_ERASE
  352. 60351  PUT@A(BLB_DX%+13+BLB_CS%*6,BLB_DY%+210)-(BLB_DX%+14+BLB_CS%*6,BLB_DY%+221),BLB_MEM%,,,,,77789:RETURN
  353. 60352 *BLB_FS_FNAME_CLICKED
  354. 60353  IF BLB_MX%<13 THEN BLB_MX%=13
  355. 60354  GOSUB *BLB_FS_CUR_ERASE:BLB_CS%=LEN(KLEFT$(BLB_F$,KLEN(LEFT$(BLB_F$,(BLB_MX%-13)\6)+" ")-1))
  356. 60355  IF BLB_CS%>=12 THEN BLB_CS%=LEN(KLEFT$(BLB_F$,KLEN(LEFT$(BLB_F$,(BLB_MX%-13)\6)+" ")-2))
  357. 60356  GOSUB *BLB_FS_CUR_PUT:WHILE MOUSE(2,0):WEND:GOTO *BLB_FS_MAIN
  358.